@echo off
setlocal enabledelayedexpansion

REM 脚本功能：根据端口号查找并管理占用进程
REM 作者：助手
REM 日期：2023-10-08

:INPUT_PORT
REM 步骤1：获取用户输入并验证格式
set /p "port=请输入要查询的端口号: "
if "%port%"=="" (
    echo 错误：端口号不能为空！
    goto :INPUT_PORT
)

REM 步骤2：通过netstat查找端口占用信息
set found=0
for /f "tokens=5" %%a in ('netstat -ano -p tcp ^| findstr /r /c:":%port% "') do (
    set "pid=%%a"
    set /a found+=1

    REM 步骤3：获取进程详细信息（支持带空格的进程名）
    set "process_name="
    set "process_id="
    for /f "tokens=1,2 delims=," %%b in ('tasklist /fi "PID eq !pid!" /fo csv /nh') do (
        set "process_name=%%~b"
        set "process_id=%%~c"
    )

    echo --------------------------
    echo [进程信息]
    echo PID: !pid!
    if defined process_name (
        echo 名称: !process_name!
    ) else (
        echo 警告：进程可能已终止
    )

    REM 步骤4：用户交互处理
    :ACTION_PROMPT
    set "choice="
    set /p "choice=是否结束该进程(Y/N)? "
    if /i "!choice!"=="Y" (
        taskkill /f /pid !pid! >nul 2>&1
        if errorlevel 1 (
            echo 错误：操作失败！可能原因：
            echo 1. 权限不足（请以管理员身份运行）
            echo 2. 进程已终止
        ) else (
            echo 成功终止进程
        )
    ) else if /i "!choice!"=="N" (
        echo 已保留进程
    ) else (
        echo 无效输入，请重新输入
        goto :ACTION_PROMPT
    )
    echo --------------------------
)

REM 步骤5：处理未找到结果的情况
if %found% equ 0 (
    echo 端口 %port% 无活跃TCP连接
    echo 可能原因：
    echo 1. 端口未被占用
    echo 2. 使用UDP协议（本脚本仅检测TCP）"
)

pause
endlocal